package ArrayList;

import javax.naming.directory.SearchControls;
import java.util.Arrays;

public class MyArrayList03 {
      private int[] elem; //用这个数组来存储数据
      private int usedSize;//用来计算表中的有效个数


      public static final int  SIZE = 10;
    //无参构造方法中默认顺序表中为10个个数
    public MyArrayList03(){
        this.elem = new int[SIZE];
    }
    //有参构造方法中指定顺序表的个数为num个
    public MyArrayList03(int num){
        this.elem = new int[num];
    }

    //打印顺序表的所有元素
    public void display(){
        for(int i = 0;i  < this.usedSize - 1; i++){
            System.out.print(this.elem[i] + ",");
        }
        System.out.println();
    }


    //判断表中是否包含元素data
    public boolean contains(int data){
        for(int i =0 ;i < this.usedSize; i++){
            if(this.elem[i] == data){
                return true;
            }
        }
        return false;
    }


    //查找元素data的位置
    public int research(int data){
        for(int i =0 ; i< this.usedSize; i++){
            if(this.elem[i] == data){
                return i;
            }
        }
        return -1;
    }


    //获取pos下标这个位置的元素
    public int getI(int pos){
       if(pos < 0 || pos >= this.usedSize){
           System.out.println("pos位置不合法");
           return -1;
       }
       return this.elem[pos];
    }

    //将指定元素更新为value
    public void set(int name, int value){
        //判断是否存在,并返回下标
        int temp = research(name);
        if(temp == -1){
            System.out.println("不存在这个元素");
            return;
        }
        this.elem[temp] = value;
    }




    //是否已经满了
    public boolean isFull(){
        if(this.elem.length > this.usedSize){
            return true;
        }
        return false;
    }


    //新增一个data元素
    public void add(int data){
        //判满
        if(isFull()){
            System.out.println("已经满了,我要扩容了");
            this.elem = Arrays.copyOf(this.elem,2 * this.elem.length);
        }

        this.elem[usedSize] = data;
        this.usedSize++;
    }




    //在pos位置新增元素,但是要先去挪数据(从后向前挪,因为从前向后挪会覆盖数据)
    //照样要去判满
    public void add(int pos, int data){
        if(isFull()){
            System.out.println("已经满了");
        }
        //pos位置是否合法
        if (pos < 0 || pos > this.usedSize - 1){
            System.out.println("pos位置不合法");
        }
        for(int i = this.usedSize - 1; i >= pos; i--){
            this.elem[i + 1] = this.elem[i];
        }

        this.elem[pos] = data;
        this.usedSize++;
    }

    //删除一个数据data
    //删除之前要先去找这个数据
    //找到之后,让后面的数据向前覆盖就可以删除这个数据了
    //   当i为usedSize - 1 时,i+1 的值为null,所以i必须小于usedSize - 1
    public void del(int data){
        int temp = research(data);
        if(temp < 0){
            System.out.println("这个元素不存在");
            return;
        }
        for(int i = temp; i < this.usedSize - 1; i++){
            this.elem[i] = this.elem[i + 1];
        }
        this.usedSize--;
    }





}
